// 内容脚本可以访问和修改用户访问的网页

console.log('内容脚本已加载');

// 自动在页面输入框中填入指定内容并在5秒后点击查询按钮
function autoFillInputs(companyName, callback) {
  console.log('开始自动填充输入框，企业名称:', companyName);
  
  if (!companyName) {
    companyName = '通富微电子股份有限公司'; // 默认名称
  }
  
  // 获取页面上所有className为"el-input__inner"的输入框
  const inputElements = document.querySelectorAll('.el-input__inner');
  
  if (inputElements.length > 0) {
    // 找到第一个可见的输入框
    for (let i = 0; i < inputElements.length; i++) {
      const input = inputElements[i];
      
      // 检查输入框是否可见
      if (isVisible(input)) {
        // 在输入框中输入指定内容
        input.value = companyName;
        // 触发input事件，确保页面脚本能够检测到值的变化
        input.dispatchEvent(new Event('input', { bubbles: true }));
        console.log('已在className为el-input__inner的输入框中填入内容:', companyName);
        
        // 等待5秒后点击查询按钮
        console.log('5秒后将自动点击查询按钮...');
        setTimeout(() => {
          clickQueryButton();
          if (callback) callback({
            success: true,
            message: '已成功在输入框中填入内容"' + companyName + '"并点击查询按钮'
          });
        }, 2000);
        
        return {
          success: true,
          message: '已成功在输入框中填入内容，5秒后将点击查询按钮'
        };
      }
    }
    if (callback) callback({
      success: false,
      message: '没有找到可见的输入框'
    });
    return {
      success: false,
      message: '没有找到可见的输入框'
    };
  } else {
    console.log('页面上没有找到className为el-input__inner的输入框');
    if (callback) callback({
      success: false,
      message: '页面上没有找到className为el-input__inner的输入框'
    });
    return {
      success: false,
      message: '页面上没有找到className为el-input__inner的输入框'
    };
  }
}

// 点击查询按钮
function clickQueryButton() {
  // 获取查询按钮元素
  const queryButton = document.querySelector('.el-button.el-button--primary.el-button--small');
  
  if (queryButton && isVisible(queryButton)) {
    console.log('找到查询按钮，即将点击...');
    // 点击查询按钮
    queryButton.click();
    console.log('已点击查询按钮');
    
    // 设置标志位，表示正在等待获取数据
    window.isWaitingForData = true;
    window.currentCompanyIndex = window.currentCompanyIndex || 0;
    
    // 5秒后获取表格单元格内容
    setTimeout(() => {
      getTableCellContent();
    }, 5000);
    
    return true;
  } else {
    console.log('没有找到可见的查询按钮');
    window.isWaitingForData = false;
    return false;
  }
}

// 获取表格单元格内容并更新到原始数据中
function getTableCellContent() {
  // 首先获取表格主体包装器
  const tableBodyWrapper = document.querySelector('.el-table__body-wrapper.is-scrolling-left');
  
  if (!tableBodyWrapper) {
    console.log('未找到表格主体包装器');
    window.isWaitingForData = false;
    return null;
  }
  
  // 创建结果对象，存储获取到的内容
  const result = {
    column4: null,
    column5: null
  };
  
  // 获取第一个单元格内容：el-table_1_column_4
  const tableCells4 = tableBodyWrapper.querySelectorAll('.el-table_1_column_4.el-table__cell');
  if (tableCells4 && tableCells4.length > 0) {
    for (let i = 0; i < tableCells4.length; i++) {
      const cell = tableCells4[i];
      if (isVisible(cell)) {
        const divElement = cell.querySelector('.cell');
        if (divElement) {
          result.column4 = divElement.textContent || divElement.innerText;
          if (result.column4) result.column4 = result.column4.trim();
          console.log('获取到第一个表格单元格内容:', result.column4);
          break;
        }
      }
    }
  } else {
    console.log('在表格主体包装器中未找到第一个指定类名的单元格');
  }
  
  // 获取第二个单元格内容：el-table_1_column_5
  const tableCells5 = tableBodyWrapper.querySelectorAll('.el-table_1_column_5.el-table__cell');
  if (tableCells5 && tableCells5.length > 0) {
    for (let i = 0; i < tableCells5.length; i++) {
      const cell = tableCells5[i];
      if (isVisible(cell)) {
        const divElement = cell.querySelector('.cell');
        if (divElement) {
          result.column5 = divElement.textContent || divElement.innerText;
          if (result.column5) result.column5 = result.column5.trim();
          console.log('获取到第二个表格单元格内容:', result.column5);
          break;
        }
      }
    }
  } else {
    console.log('在表格主体包装器中未找到第二个指定类名的单元格');
  }
  
  // 更新到原始数据中
  updateExcelData(result);
  
  // 向后台发送获取到的内容
  chrome.runtime.sendMessage({
    action: "tableCellContent", 
    data: result
  });
  
  // 重置标志位
  window.isWaitingForData = false;
  
  return result;
}

// 更新Excel数据
function updateExcelData(cellContent) {
  if (!window.excelData || !Array.isArray(window.excelData) || window.currentCompanyIndex === undefined) {
    console.log('无法更新Excel数据：数据不存在或索引无效');
    return false;
  }
  
  // 获取当前处理的企业索引
  const index = window.currentCompanyIndex;
  
  if (index >= 0 && index < window.excelData.length) {
    // 更新绑定时间数据
    if (cellContent.column4) {
      window.excelData[index]['绑定开始时间'] = cellContent.column4;
    }
    if (cellContent.column5) {
      window.excelData[index]['绑定结束时间'] = cellContent.column5;
    }
    
    console.log('已更新Excel数据，当前索引:', index, '更新后数据:', window.excelData[index]);
    return true;
  } else {
    console.log('更新Excel数据失败：索引超出范围', index);
    return false;
  }
}

// 辅助函数：检查元素是否可见
function isVisible(element) {
  return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
}

// 创建并添加Excel文件上传功能
function createExcelUploader() {
  console.log('创建Excel上传器');
  
  // 创建上传按钮和文件输入元素
  const uploaderContainer = document.createElement('div');
  uploaderContainer.style.position = 'fixed';
  uploaderContainer.style.top = '10px';
  uploaderContainer.style.right = '10px';
  uploaderContainer.style.zIndex = '9999';
  uploaderContainer.style.backgroundColor = '#fff';
  uploaderContainer.style.padding = '10px';
  uploaderContainer.style.border = '1px solid #ccc';
  uploaderContainer.style.borderRadius = '4px';
  
  // 创建文件输入元素
  const fileInput = document.createElement('input');
  fileInput.type = 'file';
  fileInput.accept = '.xlsx, .xls';
  fileInput.style.display = 'none';
  fileInput.id = 'excel-file-input';
  
  // 创建按钮
  const uploadButton = document.createElement('button');
  uploadButton.textContent = '上传Excel文件';
  uploadButton.style.padding = '5px 10px';
  uploadButton.style.backgroundColor = '#4285f4';
  uploadButton.style.color = 'white';
  uploadButton.style.border = 'none';
  uploadButton.style.borderRadius = '4px';
  uploadButton.style.cursor = 'pointer';
  
  // 添加点击事件
  uploadButton.addEventListener('click', () => {
    fileInput.click();
  });
  
  // 处理文件选择
  fileInput.addEventListener('change', (event) => {
    const file = event.target.files[0];
    if (file) {
      console.log('选择了文件:', file.name);
      parseExcelFile(file);
    }
  });
  
  // 添加元素到容器
  uploaderContainer.appendChild(uploadButton);
  uploaderContainer.appendChild(fileInput);
  
  // 添加到页面
  document.body.appendChild(uploaderContainer);
  
  console.log('Excel上传器已添加到页面');
}

// 解析Excel文件内容
function parseExcelFile(file) {
  console.log('开始解析Excel文件');
  
  // 创建FileReader实例
  const reader = new FileReader();
  
  reader.onload = function(e) {
    try {
      const data = new Uint8Array(e.target.result);
      
      // 使用importScripts加载外部库
      // 注意：由于内容脚本的安全限制，实际上我们需要将xlsx库作为扩展的依赖项
      // 在这里，我们假设xlsx库已通过manifest.json中的content_scripts配置加载
      
      // 解析工作簿
      const workbook = XLSX.read(data, { type: 'array' });
      
      // 获取第一个工作表
      const firstSheetName = workbook.SheetNames[0];
      const worksheet = workbook.Sheets[firstSheetName];
      
      // 将工作表转换为JSON
      const jsonData = XLSX.utils.sheet_to_json(worksheet);
      
      // 打印解析结果
      console.log('Excel文件解析结果:', jsonData);
      
      // 存储解析的数据到全局变量，供后续使用
      window.excelData = jsonData;
      
      // 发送解析结果到后台
      chrome.runtime.sendMessage({
        action: "excelContent",
        data: jsonData
      });
      
      // 显示成功消息
      showNotification('Excel文件解析成功，共' + jsonData.length + '条数据');
      
    } catch (error) {
      console.error('解析Excel文件时出错:', error);
      showNotification('解析Excel文件时出错: ' + error.message, true);
    }
  };
  
  reader.onerror = function() {
    console.error('读取文件时出错');
    showNotification('读取文件时出错', true);
  };
  
  // 读取文件内容
  reader.readAsArrayBuffer(file);
}

// 显示通知，isError参数控制是否为错误通知
function showNotification(message, isError = false) {
  const notification = document.createElement('div');
  notification.textContent = message;
  notification.style.position = 'fixed';
  notification.style.top = '50px';
  notification.style.right = '10px';
  notification.style.padding = '10px';
  notification.style.backgroundColor = isError ? '#f44336' : '#4CAF50';
  notification.style.color = 'white';
  notification.style.borderRadius = '4px';
  notification.style.zIndex = '10000';
  
  document.body.appendChild(notification);
  
  // 几秒后移除通知
  setTimeout(() => {
    document.body.removeChild(notification);
  }, 5000);
}

// 向后台脚本发送消息
function sendMessageToBackground() {
  chrome.runtime.sendMessage({action: "contentScriptMessage", data: "Hello from content script"},
    function(response) {
      console.log("收到来自后台的响应:", response);
    }
  );
}

// 确保内容脚本已完全加载并准备好接收消息
let isReady = false;

// 监听来自弹出窗口的消息
chrome.runtime.onMessage.addListener(
  function(message, sender, sendResponse) {
    console.log('内容脚本收到消息:', message);
    
    // 如果收到的是自动填充输入框的命令
    if (message.action === "autoFillInputs") {
      const result = autoFillInputs();
      // 返回处理结果
      sendResponse(result);
      return true; // 表示会异步发送响应
    }
    
    // 如果收到的是创建Excel上传器的命令
    if (message.action === "createExcelUploader") {
      createExcelUploader();
      sendResponse({ success: true, message: 'Excel上传器创建成功' });
      return true;
    }
    
    // 如果收到的是处理Excel数据的命令
    if (message.action === "processExcelData") {
      const result = processExcelData();
      sendResponse({ success: result, message: result ? '开始处理Excel数据' : '无法处理Excel数据' });
      return true;
    }
  }
);

// 当页面完全加载后，设置准备标志
document.addEventListener('DOMContentLoaded', function() {
  isReady = true;
  console.log('内容脚本已准备好接收消息');
  
  // 自动创建Excel上传器
  createExcelUploader();
  
  // 创建处理Excel数据按钮
  createProcessButton();
  
  // 创建下载Excel按钮
  createDownloadButton();
});

// 如果DOM已经加载完成，立即设置准备标志并创建上传器
if (document.readyState === 'complete' || document.readyState === 'interactive') {
  isReady = true;
  console.log('内容脚本已准备好接收消息（页面已加载）');
  
  // 自动创建Excel上传器
  createExcelUploader();
  
  // 创建处理Excel数据按钮
  createProcessButton();
  
  // 创建下载Excel按钮
  createDownloadButton();
}

// 处理Excel数据，循环处理所有企业
function processExcelData() {
  // 检查是否有Excel数据
  if (!window.excelData || !Array.isArray(window.excelData) || window.excelData.length === 0) {
    showNotification('没有可用的Excel数据，请先上传Excel文件', true);
    return false;
  }
  
  console.log('开始处理Excel数据，共' + window.excelData.length + '条记录');
  
  // 创建一个队列，用于顺序处理每个企业
  const queue = [...window.excelData];
  let processed = 0;
  
  // 开始处理第一个企业
  processNextCompany();
  
  // 处理下一个企业的函数
  function processNextCompany() {
    if (queue.length === 0) {
      // 所有企业都已处理完毕
      showNotification('所有企业处理完成，共处理了' + processed + '家企业');
      console.log('企业数据处理完成，最终数据:', window.excelData);
      
      // 启用下载按钮
      enableDownloadButton();
      
      return;
    }
    
    // 取出队列中的第一个企业
    const company = queue.shift();
    window.currentCompanyIndex = processed; // 设置当前处理的企业索引
    processed++;
    
    // 获取电力用户名称（去除可能的换行符）
    let companyName = company['电力用户'];
    if (companyName) {
      companyName = companyName.trim();
    } else {
      console.log('跳过无效企业数据:', company);
      processNextCompany(); // 处理下一个
      return;
    }
    
    console.log('正在处理企业:', companyName, '(' + processed + '/' + (processed + queue.length) + ')');
    
    // 填充输入框并触发查询
    autoFillInputs(companyName, function(result) {
      if (result && result.success) {
        console.log('企业 ' + companyName + ' 处理成功');
      } else {
        console.log('企业 ' + companyName + ' 处理失败:', result ? result.message : '未知错误');
      }
      
      // 设置延时，等待当前企业处理完成后再处理下一个
      // 等待长一点的时间，确保数据获取完成
      const waitInterval = setInterval(() => {
        if (!window.isWaitingForData) {
          clearInterval(waitInterval);
          setTimeout(processNextCompany, 2000); // 数据获取完成后再等待2秒处理下一个
        }
      }, 1000); // 每秒检查一次是否完成
    });
  }
  
  return true;
}

// 创建处理Excel数据的按钮
function createProcessButton() {
  // 检查是否已存在按钮
  if (document.getElementById('process-excel-btn')) {
    return;
  }
  
  const processButton = document.createElement('button');
  processButton.id = 'process-excel-btn';
  processButton.textContent = '开始处理Excel数据';
  processButton.style.position = 'fixed';
  processButton.style.top = '10px';
  processButton.style.right = '180px';
  processButton.style.padding = '5px 10px';
  processButton.style.backgroundColor = '#4CAF50';
  processButton.style.color = 'white';
  processButton.style.border = 'none';
  processButton.style.borderRadius = '4px';
  processButton.style.cursor = 'pointer';
  processButton.style.zIndex = '9999';
  
  // 添加点击事件
  processButton.addEventListener('click', processExcelData);
  
  // 添加到页面
  document.body.appendChild(processButton);
  console.log('处理Excel数据按钮已添加到页面');
}

// 创建下载Excel按钮
function createDownloadButton() {
  // 检查是否已存在按钮
  if (document.getElementById('download-excel-btn')) {
    return;
  }
  
  const downloadButton = document.createElement('button');
  downloadButton.id = 'download-excel-btn';
  downloadButton.textContent = '下载更新后的Excel文件';
  downloadButton.style.position = 'fixed';
  downloadButton.style.top = '10px';
  downloadButton.style.right = '350px';
  downloadButton.style.padding = '5px 10px';
  downloadButton.style.backgroundColor = '#2196F3';
  downloadButton.style.color = 'white';
  downloadButton.style.border = 'none';
  downloadButton.style.borderRadius = '4px';
  downloadButton.style.cursor = 'pointer';
  downloadButton.style.zIndex = '9999';
  // 初始状态为禁用
  downloadButton.disabled = true;
  downloadButton.style.opacity = '0.5';
  
  // 添加点击事件
  downloadButton.addEventListener('click', downloadUpdatedExcel);
  
  // 添加到页面
  document.body.appendChild(downloadButton);
  console.log('下载Excel按钮已添加到页面');
}

// 启用下载按钮
function enableDownloadButton() {
  const downloadButton = document.getElementById('download-excel-btn');
  if (downloadButton) {
    downloadButton.disabled = false;
    downloadButton.style.opacity = '1';
    showNotification('处理完成，可以下载更新后的Excel文件了');
  }
}

// 下载更新后的Excel文件
function downloadUpdatedExcel() {
  if (!window.excelData || !Array.isArray(window.excelData) || window.excelData.length === 0) {
    showNotification('没有可用的Excel数据可下载', true);
    return;
  }
  
  try {
    // 将JSON数据转换为工作表
    const ws = XLSX.utils.json_to_sheet(window.excelData);
    
    // 创建工作簿并添加工作表
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, "电力用户数据");
    
    // 生成文件名，使用当前时间戳
    const fileName = "电力用户数据_" + new Date().toISOString().replace(/[:.]/g, "_") + ".xlsx";
    
    // 将工作簿写入文件并下载
    XLSX.writeFile(wb, fileName);
    
    showNotification('Excel文件下载成功: ' + fileName);
    console.log('Excel文件下载成功:', fileName);
  } catch (error) {
    console.error('生成Excel文件时出错:', error);
    showNotification('生成Excel文件时出错: ' + error.message, true);
  }
}

// 可以在特定条件下调用这些函数
// showNotification();
// sendMessageToBackground(); 